package org.jabref.gui.logging;
import org.jabref.Globals;
import org.jabref.logic.logging.LogMessages;
import com.microsoft.applicationinsights.log4j.v2.internal.ApplicationInsightsLogEvent;
import com.microsoft.applicationinsights.telemetry.ExceptionTelemetry;
import com.microsoft.applicationinsights.telemetry.Telemetry;
import com.microsoft.applicationinsights.telemetry.TraceTelemetry;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.appender.AbstractAppender;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginElement;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;
@Plugin(name = "OurApplicationInsightsAppender", category = "Core", elementType = "appender", printObject = true)
@SuppressWarnings("unused") // class is indirectly constructed by log4j
public class ApplicationInsightsAppender extends AbstractAppender {
private ApplicationInsightsAppender(String name, Filter filter) {
super(name, filter, null);
}
@PluginFactory
public static ApplicationInsightsAppender createAppender(@PluginAttribute("name") String name,
@PluginElement("Filters") Filter filter) {
return new ApplicationInsightsAppender(name, filter);
}
/**
* The log event will be forwarded to the {@link LogMessages} archive.
*/
@Override
public void append(LogEvent rawEvent) {
ApplicationInsightsLogEvent event = new ApplicationInsightsLogEvent(rawEvent);
Telemetry telemetry;
if (event.isException()) {
ExceptionTelemetry exceptionTelemetry = new ExceptionTelemetry(event.getException());
exceptionTelemetry.setSeverityLevel(event.getNormalizedSeverityLevel());
telemetry = exceptionTelemetry;
} else {
TraceTelemetry traceTelemetry = new TraceTelemetry(event.getMessage());
traceTelemetry.setSeverityLevel(event.getNormalizedSeverityLevel());
telemetry = traceTelemetry;
}
telemetry.getContext().getProperties().putAll(event.getCustomParameters());
Globals.getTelemetryClient().track(telemetry);
}
}